package br.com.appclassificados.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.appclassificados.helpers.ConnectionFactory;
import br.com.appclassificados.model.TipoAnuncio;;

public class TipoAnuncioDao implements CRUD<TipoAnuncio> {
	
	//ATRIBUTOS
	private Connection con;
	private PreparedStatement ps = null;
	private ResultSet rs = null;  
	
	
	//TODO Construtores 
	public TipoAnuncioDao(){
		super();
		this.con = ConnectionFactory.getConnection().getConn(); 
	}
	    
	    
	//METODOS
	//Testado com Exito, 16:52, 19/10/2013, Maicon D.
	@Override
	public boolean insert(TipoAnuncio obj) {
		try{
            PreparedStatement ps = this.con.prepareStatement("insert into tipo_anuncio values ( ? , ? )");
            ps.setInt(1, getChave());
            ps.setString(2, obj.getDescricao());
            ps.execute();
            ps.close();
            this.con.close();                         
            return true;            
        }catch(Exception e){
            return false;
        }   
	}

	//Testado com Exito, 16:52, 19/10/2013, Maicon D.
	@Override
	public boolean delete(TipoAnuncio obj) {
		try{
            PreparedStatement ps = this.con.prepareStatement("delete from tipo_anuncio where tipo_anuncioid = ?");
            ps.setInt(1, obj.getTipoAnuncioId());
            ps.executeUpdate();
            ps.close();
            this.con.close();                         
            return true;            
        }catch(Exception e){
            return false;
        } 
	}

	//Testado com Exito, 16:52, 19/10/2013, Maicon D.
	@Override
	public boolean update(TipoAnuncio obj) {
		try{
            PreparedStatement ps = this.con.prepareStatement("update tipo_anuncio set descricao = ?  where tipo_anuncioid = ?");            
            ps.setString(1, obj.getDescricao());
            ps.setInt(2, obj.getTipoAnuncioId());
            ps.executeUpdate();
            ps.close();
            this.con.close();                         
            return true;            
        }catch(Exception e){
            return false;
        }
	}

	//Testado com Exito, 16:52, 19/10/2013, Maicon D.
	@Override
	public List<TipoAnuncio> readList() {
		try{
            PreparedStatement ps = this.con.prepareStatement("select tipo_anuncioid, descricao from tipo_anuncio");                                    
            this.rs = ps.executeQuery();            
            
            List<TipoAnuncio> lt = new ArrayList<TipoAnuncio>();
            
            while(this.rs.next()){
            	TipoAnuncio t = new TipoAnuncio(this.rs.getInt("tipo_anuncioid"), this.rs.getString("descricao"));
                lt.add(t);                
            }
            return lt;
        }catch(Exception e){
            return null;
        }
	}

	//Testado com Exito, 16:52, 19/10/2013, Maicon D.
	@Override
	public TipoAnuncio search(int id) {
		try{
            PreparedStatement ps = this.con.prepareStatement("select descricao from tipo_anuncio where tipo_anuncioid = ?");                        
            ps.setInt(1, id);
            this.rs = ps.executeQuery();
            
            if(this.rs.next()){
                TipoAnuncio t = new TipoAnuncio(id, this.rs.getString("descricao"));
                return t;
            }else
                return null;
        }catch(Exception e){
            return null;
        }
	}

	//Testado com Exito, 16:52, 19/10/2013, Maicon D.
	@Override
	public TipoAnuncio search(String value) {
		try{
	         PreparedStatement ps = this.con.prepareStatement("select tipo_anuncioid, descricao from tipo_anuncio where upper(descricao) like ?");                        
	         ps.setString(1, "%"+value.toUpperCase()+"%");
	         this.rs = ps.executeQuery();
	            
	         if(this.rs.next()){
	             TipoAnuncio t = new TipoAnuncio(this.rs.getInt("tipo_anuncioid"), this.rs.getString("descricao"));
	             return t;
	         }else
	        	 return null;
	     }catch(Exception e){
	    	 return null;
	     }
	}

	@Override
	public int getChave() {
		try{
	         PreparedStatement ps = this.con.prepareStatement("select max(tipo_anuncioid) from tipo_anuncio");                        
	         this.rs = ps.executeQuery();
	            
	         if(this.rs.next()){
	        	 return (this.rs.getInt("max(tipo_anuncioid)") + 1);
	         }else
	        	 return 0;
	     }catch(Exception e){
	    	 return 0;
	     }
	}

}
